proposal: EvidenceAnchor — pluggable external anchoring for agt-evidence.json#2244
proposal: EvidenceAnchor — pluggable external anchoring for agt-evidence.json#2244giskard09 wants to merge 4 commits into
Conversation
🤖 AI Agent: test-generator — `evidence_anchor.py`
|
🤖 AI Agent: breaking-change-detector — API CompatibilityAPI Compatibility
|
🤖 AI Agent: security-scanner — View detailsNo security issues found. |
🤖 AI Agent: contributor-guide — View detailsHi @giskard09! 👋 Thanks for this detailed and well-structured proposal—great job outlining the goals, design, and compliance mapping! 🚀 Before we can merge:
Check out our CONTRIBUTING.md for more details. Let us know if you need help! 😊 |
|
🔴 Contributor Check: HIGH
Automated check by AGT Contributor Check. |
🤖 AI Agent: docs-sync-checker — Docs SyncDocs Sync
Please address these documentation gaps. |
🤖 AI Agent: code-reviewer — Action Items:TL;DR: 0 blockers, 2 warnings. Proposal is well-structured and aligns with security and compliance goals, but minor improvements are suggested.
Action Items:
Warnings (fine as follow-up PRs):
|
PR Review Summary
Verdict: |
|
@microsoft-github-policy-service agree |
|
@giskard09 Thanks for turning #2208 into a structured proposal — this is the right shape and the additive-schema choice is exactly right. Comments below, grouped by severity. Blocking (technical)
Governance
Spec gaps
Would strengthen the proposal
Thank you, thi s is a very promising direction, addresses a real gap, just needs the canonicalization tightened, the vendor-neutrality cleaned up, and the operational impacts spelled out before this is mergeable as a design baseline. |
1e64627 to
1b11d83
Compare
…e.json Adds design proposal for a backend-agnostic EvidenceAnchor interface, canonical action_ref derivation spec, agt-evidence.json schema extension, and CLI changes for agt verify --anchor. References issue microsoft#2208. Signed-off-by: giskard09 <playplay2736@gmail.com>
Head branch was pushed to by a user without write access
1b11d83 to
9f475bd
Compare
|
Thank you for the detailed review — this is exactly the kind of signal that makes a proposal shippable. Working on v2 now. Quick alignment check on two design decisions before I push:
Everything else in your review is clear — will address all blocking, governance, and spec gap items in v2. |
|
Both good questions — quick takes: 1. Drop the int64-big-endian rule entirely; it can't coexist cleanly with JCS without re-introducing the drift we're trying to eliminate. Two options that both work:
Either is fine; just pick one and remove the binary wire format. 2. Failure semantics I'd push back on fail-open as the default. AGT's positioning (governance, zero-trust, OWASP Agentic Top 10) and the regulatory framing in your own proposal (EU AI Act Art. 12, FCA SYSC 9.1) both argue against silently-incomplete audit trails. Comparable tools (OPA, Sigstore policy-controller, Kyverno) all default to enforce/deny on the enforcement path. A fail-open default in a Microsoft-owned governance toolkit is the kind of thing that gets flagged in security review. Suggest a 3-mode config instead of a binary, since the real-world pattern doesn't fit neatly into either:
Hard rule regardless of mode: any record not successfully anchored MUST be marked in the evidence file ( Aslo another point
Don't leave "anchor failure emits a log/metric" implicit. Spec it: Anchor failures (any mode) MUST emit a structured event on AGT's existing telemetry channels — not only as an anchor_status field on the evidence record. The evidence file alone is not a sufficient failure-detection surface (it's the artifact the control was supposed to protect; relying on it to also report its own failure is circular, and an attacker who can suppress evidence writes hides the failure). Looking forward to v2. |
Blocking technical: - action_ref canonicalization: replace ad-hoc concatenation with RFC 8785 JCS - timestamp: RFC 3339 UTC string (3-digit ms), drop int64 big-endian - verify() returns AnchorVerifyResult with typed status enum (verified / not_found / hash_mismatch / backend_unavailable) + optional InclusionProof - Add clarification: verification requires network access to anchor backend, not to operator infrastructure Governance: - Remove Priority 3 Mycelium Trails from reference backend list; replace with generic "on-chain anchor (community plugins)" entry - Mark azender1/SafeAgent and argentum-core#7 refs as [informational, non-normative]; inline normative canonicalization rules in proposal body - Drop "Rama / Mycelium" affiliation from doc header Spec gaps: - Failure semantics: 3-mode config (enforce default / queue / best_effort) with hard rule: any unanchored record MUST carry anchor_status - Batching: acknowledge v2 Merkle-root path; v1 interface accommodates it - Append-only conformance requirement made explicit - Plugin discovery: explicit registration default; auto-discovery opt-in with documented security surface - Receipt vs raw evidence: one-sentence clarification - Compliance table: "satisfies" → "supports" throughout; EU AI Act note added Additions: - Observability section: log event agt.evidence.anchor.failed, 3 metrics, OTel span — following AGT telemetry conventions - Impacts section: latency, cost, file growth, availability coupling, security surface - Two Mermaid diagrams: write path and audit-verify path Signed-off-by: giskard09 <playplay2736@gmail.com>
|
v2 pushed — addresses all three points:
All other blocking/governance/spec-gap items from your first review also incorporated. Ready for another pass when you have time. |
… miyannishar - Mycelium Trails moved out of reference backends to community plugin path; proposal now ships WORM + Sigstore Rekor as in-tree references only - azender1/SafeAgent and argentum-core#7 moved to explicit "Related work" section, marked informational - Forward-looking anchor_batch() note added at end of EvidenceAnchor interface section to signal v1 extensibility without breaking changes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Thanks for the thorough review — v3 pushed. Changes from v2:
Let me know if anything else needs adjustment before this is ready to land. |
Follows up on #2208 and the design direction outlined by @Ricky-G.
What this adds
A design proposal for backend-agnostic external anchoring of compliance evidence, structured exactly as requested in #2208:
Relationship to verifiable-compliance-receipts.md
Complementary. arian-gogani's proposal covers receipt signing. This proposal covers external anchoring — making the receipt survive the infrastructure that generated it. Both are needed.
Cross-system compatibility
action_ref canonicalization is compatible with azender1/SafeAgent RFC_EXECUTION_GUARD.md and the joint interface spec at giskard09/argentum-core#7 (DashClaw x SafeAgent x Mycelium).